﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/

using System.Collections.Generic;
using System.ComponentModel;
using Xceed.Silverlight.Data;

namespace Xceed.Silverlight.DataGrid
{
  internal class SelectionRangeHelper
  {
    internal static DataRangeContext BuildDataRangeContext( DataSourceWrapper dataSource, SelectionRange selectionRange )
    {
      IEnumerable<SortDescription> sortDescriptions;

      if( selectionRange.IsSingleItem )
      {
        sortDescriptions = dataSource.PrimaryKeyInfo;
      }
      else
      {
        sortDescriptions = selectionRange.SortDescriptions;
        if( selectionRange.SortDescriptions.Count == 0 )
        {
          sortDescriptions = dataSource.AppliedSortDescriptions;
        }
      }

      return new DataRangeContext( dataSource.ElementType, sortDescriptions, selectionRange.Filter, selectionRange.FilterExpression );
    }

    internal static DataRange ConvertSelectionRange( SelectionRange selectionRange )
    {
      DataRangeContext dataRangeContext = selectionRange.DataRangeContext;
      bool isSelectionRangeInclusive = selectionRange.SelectionType == SelectionType.Selection;

      if( selectionRange.SelectToEnd == true )
      {
        if( selectionRange.SelectFromStart == true )
        {
          return DataRange.All( isSelectionRangeInclusive, dataRangeContext );
        }
        else
        {
          return DataRange.From( isSelectionRangeInclusive, selectionRange.StartRangeInfos, selectionRange.StartRangeInfos.IsInclusive, dataRangeContext );
        }
      }
      else if( selectionRange.SelectFromStart == true )
      {
        return DataRange.To( isSelectionRangeInclusive, selectionRange.EndRangeInfos, selectionRange.EndRangeInfos.IsInclusive, dataRangeContext );
      }
      else
      {
        return DataRange.From( isSelectionRangeInclusive, selectionRange.StartRangeInfos, selectionRange.StartRangeInfos.IsInclusive, selectionRange.EndRangeInfos, selectionRange.EndRangeInfos.IsInclusive, dataRangeContext );
      }
    }
  }
}
